#ifndef _MATRIX3_H
#define _MATRIX3_H

#include <math.h>
#include <float.h>
#include "BOOLEAN.H"

#ifndef _MATRIX3_
#define _MATRIX3_
typedef struct {
	float M[3][3];	
} Matrix3;
#endif

Matrix3 identityMatrix3(void);
boolean isEqual(Matrix3 left, Matrix3 right);
float determinantMatrix3(Matrix3 mat);
Matrix3 negateMatrix3(Matrix3 mat);
Matrix3 scalingMatrix3(float sx, float sy);
Matrix3 rotationMatrix3(float angle);
Matrix3 translationMatrix3(float x, float y);
boolean inverseMatrix3(Matrix3 mat, Matrix3* retVal);
Matrix3 addMatrix3(Matrix3 mat, Matrix3 adder);
Matrix3 subMatrix3(Matrix3 mat, Matrix3 subber);
Matrix3 scaleMatrix3(Matrix3 mat, float scale);
Matrix3 mulMatrix3(Matrix3 mat1, Matrix3 mat2);
Matrix3 divMatrix3(Matrix3 mat, float divisor);
boolean divideMatrix3(Matrix3 mat, Matrix3 divisor, Matrix3* retVal);
Matrix3 copyMatrix3(Matrix3 mat);
#endif
